package com.myown.structure.impl;

import com.myown.structure.Collection;

import java.util.ArrayList;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;

/**
 * 集合虚类
 *
 * @author lincky
 * @version v1.0.0
 * @time 2017.02.22 17:02
 */
public abstract class AbstractCollection<E> implements Collection<E>{

    /**
     * 元素节点
     */
    protected List<E> elements;
    protected static final String OVERFLOW_BOUND_MSG = "stack over flow";
    protected static final String UNDERFLOW_BOUND_MSG = "stack under flow";

    /**
     * 数组存储初始化 <p>
     *
     * @param arrayList 数组
     */
    public AbstractCollection(ArrayList<E> arrayList) {
        this.elements = arrayList;
    }

    /**
     * 链表存储初始化 <p>
     *
     * @param linkedList 链表
     */
    public AbstractCollection(LinkedList<E> linkedList) {
        this.elements = linkedList;
    }

    /**
     * 集合是否为空 <p>
     *
     * @return <tt>true</tt> - 集合为空
     */
    @Override
    public boolean empty() {
        return size() == 0;
    }

    /**
     * 集合大小 <p>
     *
     * @return 集合大小
     */
    @Override
    public int size() {
        return elements.size();
    }

    /**
     * 清空集合
     */
    @Override
    public void clear() {
        elements.clear();
    }

    /**
     * 添加元素
     *
     * @param item 元素
     */
    @Override
    public void add(E item) {
        elements.add(item);
    }

    /**
     * 移除元素
     *
     * @param index 索引
     */
    @Override
    public void remove(int index) {
        elements.remove(index);
    }

    /**
     * 获取元素
     *
     * @param index 索引
     * @return 索引位置元素
     */
    @Override
    public E get(int index) {
        return elements.get(index);
    }

}
